"""
文本预处理模块
功能：对原始事件文本进行清洗、分词、特征提取
输入：原始事件文本
输出：标准化文本特征向量
"""

import re
import jieba
from typing import List, Dict

class TextProcessor:
    def __init__(self):
        # 停用词列表
        self.stopwords = self._load_stopwords()
        # 清洗规则
        self.clean_patterns = [
            (r'[\s+]', ' '),  # 空白字符替换为空格
            (r'[a-zA-Z]+', ''),  # 去除英文字符
            (r'\d+', ''),  # 去除数字
            (r'[^一-龥a-zA-Z0-9]', ''),  # 保留中英文和数字
        ]
    
    def _load_stopwords(self) -> set:
        """
        加载停用词列表
        :return: 停用词集合
        """
        # 这里使用简单的停用词列表，实际应用中可以从文件加载
        stopwords = {
            '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'
        }
        return stopwords
    
    def clean_text(self, text: str) -> str:
        """
        清洗文本
        :param text: 原始文本
        :return: 清洗后的文本
        """
        # 应用清洗规则
        for pattern, replacement in self.clean_patterns:
            text = re.sub(pattern, replacement, text)
        
        # 去除多余空格
        text = re.sub(r'\s+', ' ', text).strip()
        return text
    
    def tokenize(self, text: str) -> List[str]:
        """
        对文本进行分词
        :param text: 清洗后的文本
        :return: 分词结果列表
        """
        # 使用jieba进行分词
        words = jieba.lcut(text)
        # 去除停用词和空字符串
        words = [word for word in words if word and word not in self.stopwords]
        return words
    
    def extract_features(self, text: str) -> Dict:
        """
        提取文本特征
        :param text: 原始文本
        :return: 特征字典
        """
        # 清洗文本
        cleaned_text = self.clean_text(text)
        
        # 分词
        tokens = self.tokenize(cleaned_text)
        
        # 构建特征向量（这里简化为词频统计）
        feature_vector = {}
        for token in tokens:
            feature_vector[token] = feature_vector.get(token, 0) + 1
        
        return {
            'cleaned_text': cleaned_text,
            'tokens': tokens,
            'feature_vector': feature_vector
        }
    
    def process_batch(self, texts: List[str]) -> List[Dict]:
        """
        批量处理文本
        :param texts: 文本列表
        :return: 特征字典列表
        """
        results = []
        for text in texts:
            features = self.extract_features(text)
            results.append(features)
        return results

# 使用示例
def main():
    processor = TextProcessor()
    
    # 示例文本
    sample_texts = [
        "在中山路与解放路交叉口发生一起两车相撞事故，造成交通拥堵",
        "南京路从人民广场到淮海路段进行道路施工，预计工期一个月",
        "地铁2号线人民广场站电梯故障停运，乘客需步行上下楼梯"
    ]
    
    # 批量处理
    results = processor.process_batch(sample_texts)
    
    for i, result in enumerate(results):
        print(f"文本 {i+1} 处理结果:")
        print(f"  原始文本: {sample_texts[i]}")
        print(f"  清洗后: {result['cleaned_text']}")
        print(f"  分词结果: {result['tokens']}")
        print(f"  特征向量: {result['feature_vector']}")
        print()

if __name__ == "__main__":
    main()